import lejos.nxt.LCD;
import lejos.robotics.subsumption.Behavior;

/**
 *
 * @author Nicolas
 */
public class FaireDemiTour implements Behavior {

    /**
     * Indique si le comportement demande à être actif
     * @return true sur si le robot rencontre un obstacle
     */
    public boolean takeControl() {
        //Prend le controle quand le robot rencontre un obstacle
        //return Robot.UltrasonicSensor.getDistance() <= Robot.SEUIL_OBSTACLE;
        //return false;
        try {
            //Prend le controle quand le robot rencontre un obstacle
            return Robot.OBSTACLE_DETECTE;

        } catch (Exception ex) {
            Robot.justSay("Erreur takeControl FaireDemiTour");
            return false;
        }
    }

    /**
     * Méthode immédiatement appelée après action
     * @see action()
     */
    public void suppress() {
        try {
        } catch (Exception ex) {
            Robot.justSay("Erreur suppress FaireDemiTour");
        }
    }

    /**
     * Fait faire demi-tour au robot
     */
    public void action() {
        try {

            LCD.drawString("Demi tour         ", 0, 0);
            LCD.refresh();        
            
            //on avance vers la frontière de la case avant de faire demi tour
            Robot.Pilot.forward();
            while(!Robot.estSurDuNoir()){}
            //On avance à nouveau de sorte à mettre les roues au bord de la case
            Robot.Pilot.travel(Robot.POSITON_LIGHT_SENSOR);
            //TODO : tester vitesse de rotation
            Robot.Pilot.setTurnSpeed(20f);
            Robot.Pilot.rotate(180f);
            //On attend que la rotation soit terminée ou qu'on soit sur une ligne grise
            //while(Robot.Pilot.isMoving()&&!Robot.GRIS_INTERMEDIAIRE.contient(Robot.readLightValue())){}
            Robot.Pilot.stop();
            Robot.OBSTACLE_DETECTE=false;
			//On met à jour le plan du robot
            Robot.mettreAjourDirection(2);
            Robot.inverserSensDeNavigation();

        } catch (Exception ex) {
            Robot.justSay("Erreur action FaireDemiTour");
        }
    }
}

